/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sd_proj1.interfaces;

/**
 *
 * @author Pedro Costa Correia - 32795
 * @author Valter Pedro Lopes Vicente - 39360
 */
public interface ICustomer {

	/**
	 * Método de finalização da thread cliente.
	 * @param customerId.
	 * @return <li> true - quando o cliente pode morrer, ou seja, quando a dona está morta.
	 *		<li> false - caso o cliente não tenha de morrer.
	 *
	 */
	public boolean endOperCustomer(int customedId);

	/**
	 * Monitor invocado pelo cliente, qunado este sai da loja e volta à vida normal.
	 *
	 * @param customerId Identificação do cliente.
	 */
	public void exitShop(int customedId);

	/**
	 *  Operação de ir comprar algum produto (originada pelo cliente).
	 *
	 * @param customerId Identificação do cliente.
	 * @param ng Número de produtos que o cliente pretende.
	 *
	 * @return <li> true, se conseguiu comprar o que desejava.
	 *            <li> false, em caso contrário.
	 */
	public boolean iWantThis(int customedId, int ng);

	/**
	 * Monitor invocado pelo cliente, entrando este na loja se esta estiver aberta ou voltando às suas tarefas caso contrário.
	 * @param customerId Identificação do cliente.
	 */
	public void enterShop(int customedId);

	/**
	 * Monitor invocado pelo cliente, com a pretensão de ir visitar a loja.
	 *
	 * @param customerId Identificação do cliente.
	 */
	public void goShopping(int customedId);

	/**
	 *  Verificação por parte dos clientes se a loja se encontra aberta
	 *
	 * @return<li> false - se a porta está fechada
	 *		 <li> true -  se a porta está aberta
	 */
	public boolean isDoorOpen();

	/**
	 *  O cliente verifica os produtos expostos na loja e escolhe um (operação interna).
	 *
	 * @param customerId Identificação do cliente.
	 * @return Quantidade de produtos escolhidos pelo cliente.
	 */
	public int perusingAround(int customedId);

	/**
	 * Verificação do estado de vida da dona por parte dos clientes.
	 * @return <li> true, se estiver morta.
	 *            <li> false, se estiver viva..
	 */
	public boolean isDonaIsDead();
}
